.. _database_recording:
Database Recording
==================
Database feature was built to make it easier to prepare data for end-to-end
tests, to save and restore specific state of Superdesk during development, or to
help debugging.
It works by listening for database events when recording is started and
generates a file with changes when recording is stopped. This allows to
generate data quickly by using a browser to interact with the app while
recording is in progress.
Terminology
===========
There 2 main terms here - full dumps and records.
A full **dump** is database backup, similar to one a database management
software would generate. It is possible to have many dumps.
A **record** is a custom patch-like JSON file that gets applied to a dump to
produce a database for a specific e2e test. A dump is first required in order to
produce a record and that record only works with that dump that was used when
producing a record.
Creating a dump
===============
Run ``python manage.py storage:dump`` command. See :ref:`cli` for extra
parameters. The dump will be based on the main superdesk database used by a
local instance. In order to create a clean dump to be used for e2e tests, it’s
advised to delete the main superdesk database, initialize a clean one, add a
user and at least one desk. The same ``python manage.py storage:dump`` command
can be used to create a backup of your current development database to be
restored later.
Recording changes
=================
Recording only works with mongo 4 or greater. `Replica
mode `__
has to be enabled. To enable replica mode, add
``command: --replSet rs0`` to mongo section in ``docker-compose.yml``.
Here’s an example:
::
mongo:
image: mongo:4.4
expose:
- "27017"
ports:
- "27017:27017"
command: --replSet rs0
After this, restart docker and execute the following commands in the
terminal, in the directory where your ``docker-compose.yml`` is located.
::
> docker-compose exec mongodb /bin/bash
> mongo
> rs.initiate()
Now run ``python manage.py storage:record`` to start recording changes.
Then open Superdesk in the browser, do the changes you need for a e2e
test and stop the recording(ctrl-c in terminal where recording was
started).
Restoring records
=================
Use :ref:`storage:restore-record ` command.
Other commands
==============
See :ref:`storage_dumps_records`
Using recordings in e2e tests
=============================
Not implemented yet